这篇博客介绍了数学上如何在三角形内生成均匀随机点的方法。
在进行HairStrandPlugin的迭代过程中,有涉及到发丝间插值的需求。因此研究了一下在三角形内部进行均匀随机点的生成方法。
现在有三个点
在三角形内的任意一点
因此最初的思考是直接对
可是这样一来无法达到均匀分布的需求,例如三角形最长的那条边上的点会分布的较为稀疏。
我在Graphic Gem Ⅰ中找到了两种可以生成均匀随机点的方法。
令
a←1−t√ ;
b←(1−s)t√ ;
c←st√ ;
Q←aA+bB+cC ;
在以上的算法中,我们使用变量
需要注意的是这里使用到了
令
if
s+t>1 then
begin
s←1−s
t←1−t
end
a←1−s−t ;
b←s ;
c←t ;
Q←aA+bB+cC ;
如果我们把if语句去掉,实际上上面的算法是求出了一个在平行四边形
如果这个随机点位于三角形
Method 1
可以很方便得扩展到高维,例如,如果我们需要在四面体内生成均匀的随机点,则只需要三个随机数。第一个数获得与底面平行的面,而后两个数则在这个面上进行随机点选取。
Method 2
想要扩展到高维就麻烦不少了。给出
但是实际上我们可以进行
—全文完—